博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
建造者模式
阅读量:3952 次
发布时间:2019-05-24

本文共 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/

你可能感兴趣的文章
iOS--Masonry解决 tableViewCell 重用时约束冲突
查看>>
git 与 svn 的主要区别!
查看>>
iOS-截屏,从相册选择图片,制作磨砂效果图片
查看>>
iOS-截取字符串中两个指定字符串中间的字符串
查看>>
数据库-数据库操作(使用FMDB)
查看>>
FMDB介绍以及在 swift 中的数据库操作
查看>>
iOS运行时机制(附Demo演练)
查看>>
宽字符串输出问题
查看>>
将整数转换为宽字符串
查看>>
在类中定义enum实现整数常量功能
查看>>
suse11通过安装最新内核可以上网的经验
查看>>
SUSE静态配置IP成功上网
查看>>
通过sleep让程序等待外部条件改变
查看>>
通过等待键盘输入让程序等待外部条件改变
查看>>
通过限制循环次数来避免死循环
查看>>
ADO连接字符串
查看>>
字符数组的位置决定程序能否成功执行--不明白
查看>>
拷贝代码时没有仔细检查,导致误修改了函数参数
查看>>
MySQL批量导入数据SQL语句(CSV数据文件格式)
查看>>
ADO连接Oracle
查看>>