1、简单工厂模式

  Pizza

public abstract class Pizza {
abstract void prepare();
abstract void bake();
abstract void cut();
abstract void box();
}

  

  CheesePizza

public class CheesePizza extends Pizza {

    @Override
void prepare() {
} @Override
void bake() {
} @Override
void cut() {
} @Override
void box() {
}
}

  简单工厂:SimplePizzaFactory

/**
* 简单工厂
* @author oy
* @date 2019年9月1日 下午10:49:55
* @version 1.0.0
*/
public class SimplePizzaFactory { public Pizza createPizza(String type) {
Pizza pizza = null;
if ("cheese".equals(type)) {
pizza = new CheesePizza();
} else if ("pepperoni".equals(type)) {
pizza = new PepperoniPizza();
}
return pizza;
}
}

  客户:使用工厂生产的对象

public class PizzaStore {
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory) {
this.factory = factory;
} public Pizza orderPizza(String type) {
Pizza pizza = factory.createPizza(type); pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box(); return pizza;
}
}

2、工厂方法模式

  工厂方法模式:工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类

  Animal

public abstract class Animal {
public abstract void eat();
}

  Animal实现类

public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃肉");
}
}

  工厂类

public interface Factory {
public abstract Animal createAnimal();
}
public class CatFactory implements Factory {
@Override
public Animal createAnimal() {
return new Cat();
}
}
public class DogFactory implements Factory {
@Override
public Animal createAnimal() {
return new Dog();
}
}

  测试代码

public static void main(String[] args) {
// 需求:我要买只狗
Factory f = new DogFactory();
Animal a = f.createAnimal();
a.eat();
System.out.println("-------"); //需求:我要买只猫
f = new CatFactory();
a = f.createAnimal();
a.eat();
}

3、抽象工厂模式

  参考:简单工厂模式、工厂模式以及抽象工厂模式

最新文章

  1. 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息
  2. 循序渐进 Jprofiler
  3. nginx负载均衡和反向代理有什么区别
  4. 解决配置android开发环境eclipse获取ADT获取不到,一直"Pending"
  5. Windows Thrift安装及HelloWorld
  6. Android 初步
  7. Anton and Tree
  8. Linux进程管理详解
  9. JAVASE高级2
  10. Django 发送邮件
  11. SpringMVC,SpringBoot使用ajax传递对象集合/数组到后台
  12. Eclipse中Git的使用以及IDEA中Git的使用
  13. Centos7下安装OpenLDAP+Phpldapadmin及主主同步
  14. NSIS脚本 打包安装程序
  15. CSS覆盖公共样式中的某个属性
  16. idea+maven+springmvc+helloworld
  17. lvm的磁盘管理知识点整理
  18. PHP代码审计笔记--XSS
  19. Java 深浅拷贝
  20. 81-POJ-Wall(计算几何)

热门文章

  1. (5.12)mysql高可用系列——复制中的在线切换GTID模式/增加节点/删除节点
  2. [转帖]CENTOS6.6下mysql5.7.11带boost和不带boost的源码安装
  3. Spark中分布式使用HanLP(1.7.0)分词示例
  4. PHP中的data()函数
  5. Python环境配置问题及解决办法
  6. Java中的mutable和immutable对象实例讲解
  7. 并发编程 深入分析Volatile的实现原理
  8. Eclipse 新建.jsp页面后,页面头部标签报错的解决方法
  9. 多个div排列在同一行而不换行
  10. Django之ORM操作.md