设计模式学习笔记(12)——建造者模式实现

建造者模式
一、建造小人一

package operation;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 class PersonThinBuilder extends Frame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public void paint(Graphics g) {
		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);
		
	}
	public void lauchFrame() {
		this.setLocation(400,300);
		this.setSize(800,600);
		this.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{System.exit(0);}
		});
		this.setBackground(Color.WHITE);
		setVisible(true);
}	}
 public class Main{
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PersonThinBuilder person=new PersonThinBuilder();
		person.lauchFrame();
	
	}
}

二、建造小人二

package operation;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 class PersonThinBuilder extends Frame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public void paint(Graphics g) {
		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 PersonFatBuilder{
		private Graphics g;
		public PersonFatBuilder(Graphics g)
		{
			this.g=g;
		}
		public void build()
		{
			Color c=g.getColor();
			g.setColor(Color.BLACK);
			g.fillOval(50, 50, 30, 30);//头
			g.fillOval(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 DrawPerson extends Frame{
		public void paint(Graphics g) {
			PersonFatBuilder p=new PersonFatBuilder(g);
			p.build();
		}
		public void lauchFrame() {
			this.setLocation(400,300);
			this.setSize(800, 600);
			this.addWindowListener(new WindowAdapter() {
				public void windowClosing(WindowEvent e) {
					System.exit(0);
				}
			});
			this.setBackground(Color.WHITE);
			setVisible(true);
		}
	}
	public class Main{
		public static void main(String[] args){
			DrawPerson drawperson=new DrawPerson();
			drawperson.lauchFrame();
		}
	}
	

三、建造者模式
这里建造小人的过程都是稳定的,都需要头身手脚,而具体建造的细节是不同的,有胖有瘦有高有矮。将一个复杂对象的构建与它的表示分离,使得同样的建构过程可以创建不同的表示意图是,我们需要应用于建造者模式。建造者模式就是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
先定义一个抽象的建造人的类。

package operation;

import java.awt.*;
import java.awt.event.*;
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 PersonThinBuilder extends PersonBuilder{
	public PersonThinBuilder(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 PersonDirector{
	private PersonBuilder pb;
	public PersonDirector(PersonBuilder pb)
	{
		this.pb=pb;
	}
	public void createPerson() {
		pb.buildHead();
		pb.buildBody();
		pb.buildArmLeft();
		pb.buildArmRight();
		pb.buildLegLeft();
		pb.buildLegRight();
	}
}
class DrawPerson extends Frame{
	public void paint(Graphics g) {
		Color c=g.getColor();
		g.setColor(Color.BLACK);
		PersonThinBuilder p=new PersonThinBuilder(g);
		PersonDirector pdThin=new PersonDirector(p);
		pdThin.createPerson();
		g.setColor(c);
	}
	public void lauchFrame() {
		this.setLocation(400,300);
		this.setSize(800, 600);
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		this.setBackground(Color.WHITE);
		setVisible(true);
	}
}
public class Main{
	public static void main(String[] args){
		DrawPerson drawperson=new DrawPerson();
		drawperson.lauchFrame();
	}
}

四、建造者模式基本代码
在这里插入图片描述

package operation;

import java.util.ArrayList;
import java.util.List;
 
class Product{
	List<String>parts=new ArrayList<String>();
	public void Add(String part) {
		parts.add(part);
	}
	public void Show() {
		System.out.println("产品创建---");
		for(String part:parts) {
			System.out.println(part);
		}
	}
}
abstract class Builder{
	public abstract void BuildPartA();
	public abstract void BuildPartB();
	public abstract Product GetResult();
 
}
class ConcreteBuilder1 extends Builder{
	private Product product=new Product();
 
	@Override
	public void BuildPartA() {
		// TODO Auto-generated method stub
		product.Add("部件A");
	}
 
	@Override
	public void BuildPartB() {
		// TODO Auto-generated method stub
		product.Add("部件B");
	}
 
	@Override
	public Product GetResult() {
		// TODO Auto-generated method stub
		return product;
	}
}
class ConcreteBuilder2 extends Builder{
	private Product product=new Product();
 
	@Override
	public void BuildPartA() {
		// TODO Auto-generated method stub
		product.Add("部件X");
	}
 
	@Override
	public void BuildPartB() {
		// TODO Auto-generated method stub
		product.Add("部件Y");
	}
 
	@Override
	public Product GetResult() {
		// TODO Auto-generated method stub
		return product;
	}
}
class Director{
	public void Construct(Builder builder) {
		builder.BuildPartA();
		builder.BuildPartB();
	}
}
public class Main{
	public static void main(String[] args){
		Director director=new Director();
		Builder b1=new ConcreteBuilder1();
		Builder b2=new ConcreteBuilder2();
		director.Construct(b1);
		Product p1=b1.GetResult();
		p1.Show();
		director.Construct(b2);
		Product p2=b2.GetResult();
		p2.Show();
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值