简单工厂设计模式
简介
创建一个工厂类,根据传入参数值的不同,返回不同的实例。被创建的实例具有相同的父类或接口。
适用场景:
1、需要创建的对象比较少;简单工厂模式的if else分支不宜过多。
2、客户端不关系对象的创建过程
软件设计的开闭原则:对扩展开放;对修改关闭。当系统的业务逻辑发生改变的时候,通过扩展实现业务逻辑的变化,而不是通过修改来实现业务逻辑的变化。
示例代码
@Slf4j
public class SimplePhoneFactory {
public static Phone createPhone(int i) {
switch (i) {
case 0:
return new IPone();
case 1:
return new Mate();
default:
return new MI();
}
}
public static void main(String[] args) {
final Phone phone = createPhone(0);
log.info("创建工厂实例:{}", phone.getName());
}
}
工厂设计模式
简介
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
每个抽象产品派生出多个具体产品,每个抽象工厂派生出多个具体工厂。每个具体工厂负责一个具体产品实例的创建。
示例代码
/**
* @author drebander
* @since 2020-03-02
*/
public interface PhoneFactory {
/**
* phone实例化
* @return phone
*/
Phone createPhone();
}
/**
* 华为手机实例化工厂
* @author drebander
* @since 2020-03-02
*/
public class HuaWeiPhoneFactory implements PhoneFactory {
@Override
public Phone createPhone() {
return new Mate();
}
}
@Slf4j
public class FactoryTest {
public static void main(String[] args) {
PhoneFactory factory = new HuaWeiPhoneFacroty();
final Phone phone = factory.createPhone();
log.info("工厂设计模式实例化对象:{}", phone.getName());
}
}
抽象工厂设计模式
简介
抽象工程模式:每个抽象产品派生出多个具体产品类,每个抽象工厂派生多个具体工厂类。每个具体工厂类负责一系列具体产品的实例创建。
示例代码
@Slf4j
public class FactoryTest {
public static void main(String[] args) {
InternetFactory appleFactory = new AppleFactory();
final Computer computer = appleFactory.createComputer();
final Phone phone = appleFactory.createPhone();
log.info("抽象工厂模式实例化-电脑:{},手机:{}", computer.getName(), phone.getName());
}
}
/**
* @author drebander
* @since 2020-03-02ß
*/
public class AppleFactory implements InternetFactory {
@Override
public Phone createPhone() {
return new IPone();
}
@Override
public Computer createComputer() {
return new Mac();
}
}
public interface InternetFactory {
Phone createPhone();
Computer createComputer();
}
附录-实体对象代码
public interface Phone {
String getName();
}
public class IPone implements Phone {
@Override
public String getName() {
return "iPhone";
}
}
public class Mate implements Phone {
@Override
public String getName() {
return "Mate";
}
}
public class MI implements Phone {
@Override
public String getName() {
return "MI";
}
}
public interface Computer {
String getName();
}
public class Mac implements Computer {
@Override
public String getName() {
return "Mac";
}
}
网友评论