标签:sam style 任务 ack 示例 多个参数 actor 模式 实现
创造型模式分类:
工厂方法模式示例:日志记录在软件应用系统中是最常用的任务。很多不同的功能模块,可能都需要日志的存储功能。比如文件存取日志,数据库记录日志,控制台记录日志。所有这些模块可以通过一个接口和一个具体的实现类来完成。然后我们可以根据不同模块所需要的不同功能,我们可以创建特定的日志记录对象并实现相关的功能。
工厂方法模式应用方法:假设我们首先需要定义一个用于实现某一个基本功能的超类和接口(产品类);并以此扩展出一组类(具体产品类)。之后我们创建一个用于创建产品类的类(工厂类),这个类包含着一个工厂的方法(这个方法可以接受一个参数或者多个参数)。
工厂方法的作用就是根据传递的参数决定创建哪一个子类完成实例化。
工厂方法模式代码实现:
【产品类】
package create.factory; /** * 实例化工厂类模式基类(产品类) * Created by admin on 2018/11/26. */ public interface Pet { public String petSound(); }
【具体产品类】
package create.factory; /** * 具体产品类 * Created by admin on 2018/11/26. */ public class Dog implements Pet { public String petSound() { return "旺旺"; } } package create.factory; /** * Created by admin on 2018/11/26. */ public class Cat implements Pet{ public String petSound() { return "喵喵"; } }
【工厂模板类】
package create.factory; /** * 工厂方法模式实现,并展示对象创建逻辑 * Created by admin on 2018/11/26. */ public class PetFactory { public Pet getPet(String petType){ Pet pet = null; if ("Bow".equals(petType)) { pet = new Dog(); } else if ("Meaw".equals(petType)) { pet = new Cat(); } return pet; } }
【测试类】
package create.factory; /** * Created by admin on 2018/11/26. */ public class SampleFactoryMethod { public static void main(String[] args) { PetFactory petFactory = new PetFactory(); Pet bow = petFactory.getPet("Bow"); System.out.println(bow.petSound()); } }
工厂模式应用的场景:
当需要创建一个类的时候,而在编程的时候不知道这个类的类型(需要运行的时候才能确定)
当一个类希望由其子类来指定所创建对象的具体类型的时候。
当我们想要定位被创建类,并获取相关信息时候。
示例:日志记录功能
package create.factory2; /** * Created by admin on 2018/11/26. */ public class LoggerFactoryTest { public static void main(String[] args) { LoggerFactory factory = new LoggerFactory(); AppLogger appLogger = factory.getLogger(1); appLogger.log("asda"); } } package create.factory2; /** * Created by admin on 2018/11/26. */ public class LoggerFactory { //工厂方法 public AppLogger getLogger(int value){ if (value == 1) { return new FileLogger(); } else if(value == 2){ return new DatabaseLogger(); } else if (value == 3) { return new ConsoleLogger(); } return null; } } package create.factory2; /** * Created by admin on 2018/11/26. */ public class FileLogger implements AppLogger { public void log(String logMsg) { System.out.println("日志记录文件中"); } } package create.factory2; /** * Created by admin on 2018/11/26. */ public class DatabaseLogger implements AppLogger{ public void log(String logMsg) { System.out.println("日志记录数据库中"); } } package create.factory2; /** * Created by admin on 2018/11/26. */ public class ConsoleLogger implements AppLogger{ public void log(String logMsg) { System.out.println("日志记录控制台"); } } package create.factory2; /** * 日志记录器接口 * Created by admin on 2018/11/26. */ public interface AppLogger { public void log(String logMsg); }
标签:sam style 任务 ack 示例 多个参数 actor 模式 实现
原文地址:https://www.cnblogs.com/airycode/p/10020546.html