
简单工厂模式(Simple Factory)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)
每种方法的实现不同
提供一个简单工厂模式的案例:
public abstract class Woman {
private String mySkill
public String getMySkill() {
return mySkill
}
public Woman() {
//System.out.println("我是女人")
}
public void setMySkill(String mySkill) {
this.mySkill = mySkill
}
}
----------------------------
public class LovelinessWoman extends Woman{
/*
* 可爱型女人
*/
public LovelinessWoman()
{
String mySkill="撒过娇、出过轨、勾引领导下过水"
this.setMySkill(mySkill)
}
}
-----------------------------
public class SteelinessWoman extends Woman{
/*
* 冷酷型女人
*/
public SteelinessWoman()
{
String mySkill="装过神、弄过鬼,跟别人老公亲过嘴"
this.setMySkill(mySkill)
}
}
--------------------------------------
public class WomanMakeFactory {
public Woman findWoman(int typeID) {
switch (typeID) {
case 1:
return new LovelinessWoman()
case 2:
return new VirtuousWoman()
case 3:
return new SteelinessWoman()
default:
return null
}
}
public Woman findWoman(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
/*
* Type t = Type.GetType("SimpleFactory." + type)
* Woman wm =
* (Woman)Activator.CreateInstance(t)return wm
*/
String string="cn.jbit.design.simplefactory."+type
Class c = Class.forName(string)
Woman wm = (Woman) c.newInstance()
return wm
}
}
-------------------------
调用
public class Test2 {
/**
* @param args
* @throws IllegalAccessException
* @throws InstantiationException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Scanner input=new Scanner(System.in)
boolean sel=false
do {
System.out.println("请选择你要找的女人的类型")
System.out.println("LovelinessWoman:可爱型女人 VirtuousWoman:善良型女人 SteelinessWoman:冷酷型女人")
String typeid=input.next()
WomanMakeFactory factory = new WomanMakeFactory()
Woman wm=factory.findWoman(typeid)
System.out.println("该类型女人的新标准:")
System.out.println(wm.getMySkill())
System.out.println("还想看看别的类型吗?y代表想,n代表再也不想了")
sel=input.next().equals("y")
} while (sel)
}
}
工厂模式就是在接口和子类之间加入了一个过渡端,通过此过渡端获得接口的实例化对象,这个过渡端也就是所谓的工厂类。这样以后如果再有程序子类要扩充,直接修改工厂类客户端就可以根据标记得到相应的实例,增加了程序的灵活性。eg:interface Fruit{
public void eat()
}
class Apple implements Fruit{
public void eat(){
System.out.println("** $$$$$")
}
}
class Orange implements Fruit{
public void eat(){
System.out.println("** #####。")
}
}
class Factory{ // 定义工厂类
public static Fruit getInstance(String className){
Fruit f = null
if("apple".equals(className)){ // 判断
f = new Apple()
}
if("orange".equals(className)){ // 判断
f = new Orange()
}
return f
}
}
public class InterfaceCaseDemo{
public static void main(String args[]){
Fruit f = Factory.getInstance(null) // 实例化接口
f.eat()
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)