(三)工厂模式

国庆期间去东北参加了朋友的婚礼,时光飞逝呀,人生漫长又短暂,要给自己找点有乐趣的事情去做。

以下实践来自实验楼,链接:https://www.shiyanlou.com/courses/100/learning/?id=865

什么是工厂模式?

工厂一般指生产特定产品的平台,那么类似的,工厂模式可以将其类比为一个工厂,指生产特定类型的对象的一种模式。工厂模式封装了创建对象的细节,使用者只使用对象就可以。

工厂模式分类:

普通工厂模式、多个工厂模式、静态工厂方法模式

普通工厂模式示例:

实现代码:

// 二者共同的接口
interface Human{
    public void eat();
    public void sleep();
    public void beat();
}

// 创建实现类 Male
class Male implements Human{
    public void eat(){
        System.out.println("Male can eat."); 
    }
    public void sleep(){
        System.out.println("Male can sleep.");
    }
    public void beat(){
        System.out.println("Male can beat.");
    }
} 
//创建实现类 Female
class Female implements Human{
    public void eat(){
        System.out.println("Female can eat."); 
    }
    public void sleep(){
        System.out.println("Female can sleep.");
    }
    public void beat(){
        System.out.println("Female can beat.");
    }
} 

// 创建普通工厂类
class HumanFactory{
    public Human createHuman(String gender){
        if( gender.equals("male") ){
           return new Male();
        }else if( gender.equals("female")){
           return new Female();
        }else {
            System.out.println("请输入正确的类型!");
            return null;
        }
    }
}

// 工厂测试类
public class FactoryTest {
    public static void main(String[] args){
        HumanFactory factory = new HumanFactory();
        Human male = factory.createHuman("male");
        male.eat();
        male.sleep();
        male.beat();
    }
}

编译后运行即可。

多个工厂模式示例:

// 多个工厂方法
public class HumanFactory{
    public Male createMale() {
        return new Male();
    }
    public Female createFemale() {
        return new Female();
    }
}

// 工厂测试类
public class FactoryTest {
    public static void main(String[] args){
        HumanFactory factory = new HumanFactory();
        Human male = factory.createMale();
        male.eat();
        male.sleep();
        male.beat();
    }
}

静态工厂方法模式示例:

// 多个工厂方法
public class HumanFactory{
    public static Male createMale() {
        return new Male();
    }
    public static Female createFemale() {
        return new Female();
    }
}

// 工厂测试类
public class FactoryTest {
    public static void main(String[] args){
        Human male = HumanFactory.createMale();
        male.eat();
        male.sleep();
        male.beat();
    }
}

如上,可以看到,工厂模式只有一个创建函数,多个工厂模式有多个创建函数,静态工厂模式将多个工厂模式的创建函数设置为静态。第一种在使用时需要记住传入的字符,第二种需要实例化对象,因此使用最多的是第三种方法。

应用举例:

java中应用举例:

java.util.Calendar - getInstance()
java.util.Calendar - getInstance(TimeZone zone)
java.util.Calendar - getInstance(Locale aLocale)
java.util.Calendar - getInstance(TimeZone zone, Locale aLocale)
java.text.NumberFormat - getInstance()
java.text.NumberFormat - getInstance(Locale inLocale)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章