head first 设计模式笔记4-工厂模式(简单工厂、工厂方法、抽象工厂)
2024-10-07 03:08:20
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、抽象工厂模式
最新文章
- 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息
- 循序渐进 Jprofiler
- nginx负载均衡和反向代理有什么区别
- 解决配置android开发环境eclipse获取ADT获取不到,一直";Pending";
- Windows Thrift安装及HelloWorld
- Android 初步
- Anton and Tree
- Linux进程管理详解
- JAVASE高级2
- Django 发送邮件
- SpringMVC,SpringBoot使用ajax传递对象集合/数组到后台
- Eclipse中Git的使用以及IDEA中Git的使用
- Centos7下安装OpenLDAP+Phpldapadmin及主主同步
- NSIS脚本 打包安装程序
- CSS覆盖公共样式中的某个属性
- idea+maven+springmvc+helloworld
- lvm的磁盘管理知识点整理
- PHP代码审计笔记--XSS
- Java 深浅拷贝
- 81-POJ-Wall(计算几何)
热门文章
- (5.12)mysql高可用系列——复制中的在线切换GTID模式/增加节点/删除节点
- [转帖]CENTOS6.6下mysql5.7.11带boost和不带boost的源码安装
- Spark中分布式使用HanLP(1.7.0)分词示例
- PHP中的data()函数
- Python环境配置问题及解决办法
- Java中的mutable和immutable对象实例讲解
- 并发编程 深入分析Volatile的实现原理
- Eclipse 新建.jsp页面后,页面头部标签报错的解决方法
- 多个div排列在同一行而不换行
- Django之ORM操作.md