设计模式之建造者模式

场景:画不同的人。

我看教程中建造者是一个接口,而我这个例子中,建造者使用了抽象类,因为要实现JPanel,然后是两个子类建造者,再设计一个指挥者类,本来应该在指挥者类中组装建造者的方法,但是由于技术原因,我这只能在子类建造者的paint方法中组装建造者了。最后是客户端主类。

建造者抽象类:

package com.freshbin.pattern.builder.myexample.person;

import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.swing.JPanel;

/**
 * 小人建造接口
 * 
 * @author freshbin
 * @date 2019年1月13日 上午11:01:47
 */
public abstract class PersonBuilder extends JPanel {
	protected Graphics graphics;
	
	abstract void builderHead();

	abstract void builderBody();

	abstract void builderArmLeft();

	abstract void builderArmRight();

	abstract void builderLegLeft();

	abstract void builderLegRight();
}

建造者子类:

package com.freshbin.pattern.builder.myexample.person;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

/**
 * 瘦小人
 * 
 * @author freshbin
 * @date 2019年1月13日 上午11:04:43
 */
public class ThinPersonBuilder extends PersonBuilder {
	
	@Override
	public void builderHead() {
		graphics.drawOval(50, 20, 30, 30);
	}

	@Override
	public void builderBody() {
		graphics.drawRect(60, 50, 10, 50);
	}

	@Override
	public void builderArmLeft() {
		graphics.drawLine(60, 50, 40, 100);
	}

	@Override
	public void builderArmRight() {
		graphics.drawLine(70, 50, 90, 100);
	}

	@Override
	public void builderLegLeft() {
		graphics.drawLine(60, 100, 45, 150);
	}

	@Override
	public void builderLegRight() {
		graphics.drawLine(70, 100, 85, 150);
	}

	@Override
	public void paint(Graphics graphics) {
		super.paint(graphics);
		this.graphics = graphics;
		builderHead();
		builderBody();
		builderArmLeft();
		builderArmRight();
		builderLegLeft();
		builderLegRight();
	}
}
package com.freshbin.pattern.builder.myexample.person;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

/**
 * 胖小人
 * 
 * @author freshbin
 * @date 2019-1-13 15:26:37
 */
public class FatPersonBuilder extends PersonBuilder {
	
	@Override
	public void builderHead() {
		graphics.drawOval(50, 20, 30, 30);
	}

	@Override
	public void builderBody() {
		graphics.drawRect(50, 50, 30, 50);
	}

	@Override
	public void builderArmLeft() {
		graphics.drawLine(50, 50, 40, 100);
	}

	@Override
	public void builderArmRight() {
		graphics.drawLine(80, 50, 90, 100);
	}

	@Override
	public void builderLegLeft() {
		graphics.drawLine(50, 100, 45, 150);
	}

	@Override
	public void builderLegRight() {
		graphics.drawLine(80, 100, 85, 150);
	}

	@Override
	public void paint(Graphics graphics) {
		super.paint(graphics);
		this.graphics = graphics;
		builderHead();
		builderBody();
		builderArmLeft();
		builderArmRight();
		builderLegLeft();
		builderLegRight();
	}
}

指挥者:

package com.freshbin.pattern.builder.myexample.person;

import java.awt.Graphics;

import javax.swing.JFrame;

/**
 * 建造小人指挥者
 * 
 * @author freshbin
 * @date 2019年1月13日 上午11:12:58
 */
public class PersonDirector extends JFrame {
	
	private PersonBuilder personBuilder;
	
	public PersonDirector(PersonBuilder personBuilder, Integer width, Integer hight) {
		this.personBuilder = personBuilder;
		this.add(personBuilder);
		this.setSize(width, hight);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public void builderPerson() {
		/*personBuilder.builderHead();
		personBuilder.builderBody();
		personBuilder.builderArmLeft();
		personBuilder.builderArmRight();
		personBuilder.builderLegLeft();
		personBuilder.builderLegRight();*/
	}
}

客户端主类:

package com.freshbin.pattern.builder.myexample;

import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

import com.freshbin.pattern.builder.myexample.person.FatPersonBuilder;
import com.freshbin.pattern.builder.myexample.person.PersonBuilder;
import com.freshbin.pattern.builder.myexample.person.PersonDirector;
import com.freshbin.pattern.builder.myexample.person.ThinPersonBuilder;

/**
 * 建造者模式
 * 
 * @author freshbin
 * @date 2019年1月13日 上午10:53:06
 */
public class BuilderPatternDemo {
	public static void main(String[] args) {
		int width=480;
		int hight=720;
		PersonBuilder thinPersonBuilder = new ThinPersonBuilder();
		PersonDirector personDirector = new PersonDirector(thinPersonBuilder, width, hight);
		
		PersonBuilder fatPersonBuilder = new FatPersonBuilder();
		personDirector = new PersonDirector(fatPersonBuilder, width, hight);
	}
}

效果图:

 

github地址:https://github.com/freshbin/designPattern

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值