设计模式-简单工厂模式

元气小坏坏 提交于 2019-11-30 22:44:18

开闭原则:一个软件实体应该对扩展开放,对修改关闭,也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现 在不修改源代码的情况下改变这个模块的行为。

创建型模式:将对象的 创建过程 和 使用过程分离,降低耦合,使得软件系统易于扩展。

简单工厂模式属于创建型模式。

通过一个例子(权限管理)理解简单工厂模式

1.客户端有很多人可以登录,身份不同,有员工、经理和管理者。这三者权限不同,但都是客户。所以先创建一个抽象类客户User,再让三个具体类去继承。

2.员工、经理和管理者称为具体类Employee、Manager、Administrator,有各自的方法。

3.客户端里实现主函数main,对象的创建必然是在主函数里。

4.不直接创建对象,通过工厂类UserFactory创建,返回的User对象。具体返回是创建三种具体类对象。

5.实际开发过程中,会有DAO层,获取账号密码,再通过数据库判断是什么账号,返回员工、经理或管理者的标志,再通过标志传入工厂类获取对象。

 1 package 简单工厂模式;
 2 
 3 public class Client {
 4 
 5     public static void main(String[] args) {
 6         try {
 7             User user;
 8             UserDAO userdao=new UserDAO();
 9             int permisson=userdao.findPermission("zhangsan", "123456");
10             user=UserFactory.getUser(permisson);//客户端只传入参数,通过工厂创建,不管对象如何创建
11             user.sameOperation();
12             user.diffOperation();
13         }catch(Exception e) {
14             System.out.println(e.getMessage());
15         }
16     }
17 }
18 
19 abstract class User{
20     public void sameOperation() {
21         System.out.println("修改个人资料");
22     }
23     public abstract void diffOperation();
24 }
25 
26 class Employee extends User{
27     public Employee() {
28         System.out.println("创建员工对象");
29     }
30     public void diffOperation() {
31         System.out.println("员工拥有创建假条权限");
32     }
33 }
34 class Manager extends User{
35     public Manager() {
36         System.out.println("创建经理对象");
37     }
38     public void diffOperation() {
39         System.out.println("经理拥有创建和审批假条权限");
40     }
41 }
42 class Administrator extends User{
43     public Administrator() {
44         System.out.println("创建管理员对象");
45     }
46     public void diffOperation() {
47         System.out.println("经理拥有创建和管理假条权限");
48     }
49 }
50 
51 class UserFactory {//工厂类,根据逻辑条件返回对象,负责创建对象,这样对象不是在主函数里创建的
52     public static User getUser(int permisson) {
53         if(permisson==0)
54             return new Employee();
55         else if(1==permisson)
56             return new Manager();
57         else if(permisson==2)
58             return new Administrator();
59         else 
60             return null;
61     }
62 }//适用于创建对象较少,这样逻辑结构不会太过复杂
63 //缺点:每加一个产品类,就要修改工厂类,加入必要的逻辑处理,违背了“开闭原则”,通过工厂方法模式改进
64 
65 
66 class UserDAO {//用户表数据访问类(模拟)UserDAO
67     public int findPermission(String name,String password) {
68         if(name=="zhangsan"&&password=="123456")
69             return 0;
70         else 
71             return -1;
72     }
73 }
简单工厂模式

 输出:

创建员工对象
修改个人资料
员工拥有创建假条权限

简言之,将创建对象交给工厂去类去实现,创建对象和使用对象分隔开。(感觉设计模式只是一种编码技巧,各种名字起得天花乱坠)

缺点:每加一个产品类,就要修改工厂类,加入必要的逻辑处理,需要修改源码,违背了“开闭原则”,通过工厂方法模式改进。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!