本文共 4925 字,大约阅读时间需要 16 分钟。
案例:建造小人一
源代码:
import java.util.*;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.lang.*;class main extends Frame{ public void paint(Graphics g) { Color c=g.getColor(); g.setColor(Color.BLACK); g.fillOval(50, 50, 50, 50); g.fillRect(60, 80, 10, 50); g.drawLine(60, 80, 40, 130); g.drawLine(70, 80, 90, 130); g.drawLine(60, 130, 45, 180); g.drawLine(70,130, 85, 180); g.setColor(c);} public void lauchFrame() { this.setLocation(400, 300); this.setSize(800, 600); this.addWindowFocusListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); this.setBackground(Color.WHITE); setVisible(true); } public static void main(String[] args) { main person=new main(); person.lauchFrame(); }}
建造小人二
分别创建一个瘦小人的类和胖小人的类。
class personThin{ private Graphics g; public personThin(Graphics g) { this.g=g; } public void build() { Color c=g.getColor(); g.setColor(Color.BLACK); g.fillOval(50, 50, 30, 30); g.fillRect(60, 80, 10, 50); g.drawLine(60, 80, 40, 130); g.drawLine(70, 80, 90, 130); g.drawLine(60, 130, 45, 180); g.drawLine(70,130, 85, 180); g.setColor(c); }}class personFat{ private Graphics g; public personFat(Graphics g) { this.g=g; } public void build() { Color c=g.getColor(); g.setColor(Color.BLACK); g.fillOval(50, 50, 30, 30); g.fillRect(45, 80, 40, 50); g.drawLine(60, 80, 40, 130); g.drawLine(70, 80, 90, 130); g.drawLine(60, 130, 45, 180); g.drawLine(70,130, 85, 180); g.setColor(c); }}class main extends Frame{ public void paint(Graphics g) { personFat p=new personFat(g); p.build();} public void lauchFrame() { this.setLocation(400, 300); this.setSize(800, 600); this.addWindowFocusListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); this.setBackground(Color.WHITE); setVisible(true); } public static void main(String[] args) { main person=new main(); person.lauchFrame(); }}
如果需要将一个复杂对象的构建与它表示分离,使得同样的构建过程可以创建不同的表示时,需要应用建造者模式,又叫生成器模式。
建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 用了建造者模式,用户就不需要知道具体建造的过程和细节,只需要指定需要建造的类型就可以得到它们。一个小人要有头、身体、左手、右手、左脚、右脚。。
所以要定义一个抽象的建造人的类,把这个过程稳住。
abstract class PersonBuilder{ protected Graphics g; public PersonBuilder(Graphics g) { this.g=g; } public abstract void buildhead(); public abstract void buildbody(); public abstract void buildArmleft(); public abstract void buildArmRight(); public abstract void buildLegleft(); public abstract void buildLegRight();}class personThin extends PersonBuilder{ public personThin(Graphics g) { super(g); } @Override public void buildhead() { // TODO Auto-generated method stub g.fillOval(50, 50, 30, 30); } @Override public void buildbody() { // TODO Auto-generated method stub g.fillRect(60, 80, 10, 50); } @Override public void buildArmleft() { // TODO Auto-generated method stub g.drawLine(60, 80, 40, 130); } @Override public void buildArmRight() { // TODO Auto-generated method stub g.drawLine(70, 80, 90, 130); } @Override public void buildLegleft() { // TODO Auto-generated method stub g.drawLine(60, 130, 45, 180); } @Override public void buildLegRight() { // TODO Auto-generated method stub g.drawLine(70,130, 85, 180); }}class personFat extends PersonBuilder{ public personFat(Graphics g) { super(g); } @Override public void buildhead() { // TODO Auto-generated method stub g.fillOval(50, 50, 30, 30); } @Override public void buildbody() { // TODO Auto-generated method stub g.fillRect(45, 80, 40, 50); } @Override public void buildArmleft() { // TODO Auto-generated method stub g.drawLine(60, 80, 40, 130); } @Override public void buildArmRight() { // TODO Auto-generated method stub g.drawLine(70, 80, 90, 130); } @Override public void buildLegleft() { // TODO Auto-generated method stub g.drawLine(60, 130, 45, 180); } @Override public void buildLegRight() { // TODO Auto-generated method stub g.drawLine(70,130, 85, 180); }}class PersonDirector//建造控制过程的类,用它来隔离用户与建造过程的关联{ private PersonBuilder pb; public PersonDirector(PersonBuilder pb) { this.pb=pb; } public void creatPerson() { pb.buildhead(); pb.buildbody(); pb.buildArmleft(); pb.buildArmRight(); pb.buildLegleft(); pb.buildLegRight(); }}class main extends Frame{ public void paint(Graphics g) { Color c=g.getColor(); g.setColor(Color.BLACK); personThin p=new personThin(g); PersonDirector PdThin=new PersonDirector(p);//用户通过调用PersonDirector类就可以根据选择建造小人 PdThin.creatPerson();//而建造的过程通过creatPerson()制定好了。 g.setColor(c); } public void lauchFrame() { this.setLocation(400, 300); this.setSize(800, 600); this.addWindowFocusListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); this.setBackground(Color.WHITE); setVisible(true); } public static void main(String[] args) { main person=new main(); person.lauchFrame(); }}抽象一个小人类,用户可以根据选择调用不同的建造方法。
转载地址:http://pxyzi.baihongyu.com/