工厂方法模式入门案例

工厂方法模式

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

工厂方法模式实现时,客户端要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法爸简单工厂的内部逻辑判断转移到了客户端代码来进行,你想要增加功能,本来是改工厂类的,而现在是修改客户端。

入门案例
package com.test.fac01;

public class User {

    private Integer uid;
    private String uname;

    public User() {

    }

    public User(Integer uid, String uname) {

        this.uid = uid;
        this.uname = uname;
    }

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                '}';
    }
}
package com.test.fac01;

public class People {
    private String pname;
    private Integer page;

    public People() {
    }

    public People(String pname, Integer page) {
        this.pname = pname;
        this.page = page;
    }

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    @Override
    public String toString() {
        return "People{" +
                "pname='" + pname + '\'' +
                ", page=" + page +
                '}';
    }
}
package com.test.fac01;

public interface IUser {

    void insert(User user);
    void getByUid (Integer uid);
}
package com.test.fac01;

public interface IPeople {
    void insert(People people);

    void getByPid(Integer pid);
}
package com.test.fac01;

public class AsessServerFactory implements IFactory {
    @Override
    public IUser CreateUser() {
        return new AsessServerUser();
    }

    @Override
    public IPeople createPeople() {
        return new AsessServerPeople();
    }
}
package com.test.fac01;

public class SqlServerFactory implements IFactory {
    @Override
    public IUser CreateUser() {
        return new SqlserverUser();
    }

    @Override
    public IPeople createPeople() {
        return new SqlserverPeople();
    }
}
package com.test.fac01;

public class SqlserverPeople implements IPeople {
    @Override
    public void insert(People people) {
        System.out.println("新增一条数据" + people + "新用户" + "【SqlserverPeople】");
    }

    @Override
    public void getByPid(Integer pid) {
        System.out.println("根据" + pid + "查询用户" + "【SqlserverPeople】");
    }
}
package com.test.fac01;

public class SqlserverUser implements IUser {

    /**
     * TODO 新增用户
     */
    @Override
    public void insert(User user){
        System.out.println("新增一条数据" + user + "新用户" + "【SqlserverUser】");
    }

    /**
     * TODO 查询用户
     */
    @Override
    public void getByUid(Integer uid){
        System.out.println("根据" + uid + "查询用户" + "【SqlserverUser】");
    }
}
package com.test.fac01;

public class AsessServerPeople implements IPeople {
    @Override
    public void insert(People people) {
        System.out.println("新增一条数据" + people + "新用户" + "【AsessServerPeople】");
    }

    @Override
    public void getByPid(Integer pid) {
        System.out.println("根据" + pid + "查询用户" + "【AsessServerPeople】");
    }
}
package com.test.fac01;

public class AsessServerUser implements IUser {

    @Override
    public void insert(User user) {
        System.out.println("新增一条数据" + user + "新用户" + "【AsessServerUser】");
    }

    @Override
    public void getByUid(Integer uid) {
        System.out.println("根据" + uid + "查询用户" + "【AsessServerUser】");
    }
}
package com.test.fac01;

public class MainTest {
    public static void main(String[] args) {
        /**
         * TODO 使用工厂方法模式
         */
        User user = new User();
        IFactory factory = new AsessServerFactory();
        IUser iUser = factory.CreateUser();
        iUser.insert(user);
        iUser.getByUid(user.getUid());

        System.out.println("=================================");
        People people = new People();
        IFactory factory1 = new SqlServerFactory();
        IPeople iPeople = factory1.createPeople();
        iPeople.insert(people);
        iPeople.getByPid(people.getPage());
    }
}











猜你喜欢

转载自blog.csdn.net/wildwolf_001/article/details/80481733