1. 工厂模式
抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
public interface Sender {
public void send();
}
public interface Provider {
public Sender produce();
}
public class MailSender implements Sender {
@Override
public void send() {
System.out.println("this is mail");
}
}
public class WeixinSender implements Sender {
@Override
public void send() {
System.out.println("this is weixin sender");
}
}
public class SendMailFactory implements Provider {
@Override
public Sender produce() {
return new MailSender();
}
}
public class SendWeixinFactory implements Provider {
@Override
public Sender produce() {
return new WeixinSender();
}
}
public class Test {
public static void main(String[] args) {
Provider provider = new SendWeixinFactory();
Sender sender = provider.produce();
sender.send();
}
}
2. 建造者模式
工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。
建造者模式将很多功能集成到一个类里,这个类可以创造出比较复杂的东西。所以与工程模式的区别就是:工厂模式关注的是创建单个产品,而建造者模式则关注创建符合对象,多个部分。
/**
* 工作过程
*/
public abstract class Builder {
public abstract void openEye();
public abstract void eatFood();
public abstract void doWork();
}
/**
*打工仔
*/
public class ConcreteBuilder extends Builder {
Person worker = new Person();
@Override
public void openEye() {
worker.Add("睁开眼");
}
@Override
public void eatFood() {
worker.Add("吃饭");
}
@Override
public void doWork() {
worker.Add("敲代码");
}
public Person getWorker() {
return worker;
}
}
/**
* 包工头
*/
public class Director {
public void construct(Builder builder){
builder.openEye();
builder.eatFood();
builder.doWork();
}
}
/**
* 干活的人,就是你(其中的一个打工仔)
*/
public class Person {
//日常生活流程
private List<String> parts = new ArrayList<String>();
//记录每天日常
public void Add(String part){
parts.add(part);
}
public void Show(){
for (int i = 0;i<parts.size();i++){
System.out.println("开始了"+parts.get(i));
}
System.out.println("sleep,good night");
}
}
public class Test {
public static void main(String[] args) {
Director director = new Director();
Builder builder = new ConcreteBuilder();
director.construct(builder);
Person person = ((ConcreteBuilder) builder).getWorker();
person.Show();
}
}
网友评论