国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

設(shè)計模式-抽象工廠方法

2019-11-14 11:43:14
字體:
供稿:網(wǎng)友

除了洗衣服,這次加上看電視的功能了

1.洗衣服有IWash接口和兩個實現(xiàn)類

2.看電視也有ITv接口和兩個實現(xiàn)類

3.工廠方面首先是一個工廠接口,然后定義一個實現(xiàn)類,通過讀取xml文件反射生成類,這樣以后洗衣服和看電視具體實現(xiàn)改變時無須修改工廠類,只需要修改xml文件

java代碼如下

beans.xml

<?xml version="1.0" encoding="UTF-8"?>	<beans>		<bean id="滾筒洗衣機" class="com.liu.pattern3.GTWasher"></bean>		<bean id="波輪洗衣機" class="com.liu.pattern3.BLWasher"></bean>		<bean id="國產(chǎn)電視" class="com.liu.pattern3.GCTv"></bean>		<bean id="進口電視" class="com.liu.pattern3.JKTv"></bean>	</beans>

IFactory

package com.liu.pattern3;//抽象工廠public interface IFactory {	public IWasher createWasher(String name);	public ITv createTv(String name);}

MyFactory

package com.liu.pattern3;public class MyFactory implements IFactory {	PRivate ClassPathXmlLoader loader = new ClassPathXmlLoader();		@Override	public IWasher createWasher(String name) {		return (IWasher)loader.getBean(name);	}	@Override	public ITv createTv(String name) {		return (ITv)loader.getBean(name);	}}

ClassPathXmlLoader

package com.liu.pattern3;import java.io.IOException;import java.util.HashMap;import java.util.List;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;public class ClassPathXmlLoader {	private HashMap<String,Object> beans;		public Object getBean(String name){		return beans.get(name);	}		public ClassPathXmlLoader(){		//Load xml File		SAXBuilder builder = new SAXBuilder();		beans = new HashMap<String, Object>();		try {			Document doc = builder.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml"));			Element root = doc.getRootElement();			List<Element> list = root.getChildren("bean");			for(int i=0;i<list.size();i++){				Element bean = list.get(i);				String id = bean.getAttributeValue("id");				String name = bean.getAttributeValue("class");				Object o = Class.forName(name).newInstance();				beans.put(id,o);			}		} catch (Exception e) {			e.printStackTrace();		}	}}

IWasher

package com.liu.pattern3;public interface IWasher {	public void wash();}

BLWasher

package com.liu.pattern3;public class BLWasher implements IWasher {	@Override	public void wash() {		System.out.println("波輪洗衣機洗衣服了");	}}

GTWasher

package com.liu.pattern3;public class GTWasher implements IWasher {	@Override	public void wash() {		System.out.println("滾筒洗衣機洗衣服了");	}}

ITv

package com.liu.pattern3;public interface ITv {	public void see();}

JKTv

package com.liu.pattern3;public class JKTv implements ITv {	@Override	public void see() {		System.out.println("看進口電視");	}}

GCTv

package com.liu.pattern3;public class GCTv implements ITv {	@Override	public void see() {				System.out.println("看國產(chǎn)電視");	}}

Test

package com.liu.pattern3;public class Test {	public static void main(String[] args) {		IFactory factory = new MyFactory();		IWasher washer = factory.createWasher("波輪洗衣機");		washer.wash();		ITv tv = factory.createTv("國產(chǎn)電視");		tv.see();	}}

 

C#實現(xiàn)代碼

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml;using System.Collections;using System.Reflection;namespace com.liu.pattern3{    public class ClassPathXmlLoader {        private Hashtable beans;        public ClassPathXmlLoader(){            beans = new Hashtable();            XmlDocument xmlDoc = new XmlDocument();            xmlDoc.Load("beans.xml");            XmlNode root = xmlDoc.SelectSingleNode("beans");            XmlNodeList list = root.SelectNodes("bean");            for (int i = 0; i < list.Count; i++) {                XmlNode node = list.Item(i);                String id = node.Attributes["id"].Value;                String name = node.Attributes["class"].Value;                Object o = Assembly.Load("AbstractFactory").CreateInstance(name);                beans.Add(id, o);            }        }        public Object GetBean(String name){            return beans[name];        }    }    public interface IWasher    {        void Wash();    }    public class GTWasher : IWasher    {        public void Wash()        {            System.Console.WriteLine("滾筒洗衣機洗衣服了");        }    }    public class BLWasher : IWasher    {        public void Wash()        {            System.Console.WriteLine("波輪洗衣機洗衣服了");        }    }    public interface ITv    {        void See();    }    public class GCTv:ITv {        public void See() {            System.Console.WriteLine("看國產(chǎn)電視");        }    }    public class JKTv:ITv    {        public void See()        {            System.Console.WriteLine("看進口電視");        }    }    public interface IFactory    {        IWasher CreateWasher(String name);        ITv CreateTv(String name);    }    public class MyFactory : IFactory {        private ClassPathXmlLoader loader = new ClassPathXmlLoader();                public IWasher CreateWasher(String name) {            return (IWasher)loader.GetBean(name);        }        public ITv CreateTv(String name)        {            return (ITv)loader.GetBean(name);        }    }    class Test    {        static void Main(string[] args)        {            MyFactory factory = new MyFactory();            IWasher washer = factory.CreateWasher("滾筒洗衣機");            washer.Wash();            ITv tv = factory.CreateTv("進口電視");            tv.See();            System.Console.ReadKey();        }    }}

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 汝州市| 德令哈市| 桐城市| 武功县| 昌江| 寻乌县| 明溪县| 婺源县| 新乐市| 文安县| 蓝山县| 玛沁县| 青川县| 岳阳市| 绥滨县| 永和县| 平罗县| 陵水| 阿城市| 开阳县| 磴口县| 利辛县| 鹤山市| 汤阴县| 通州市| 平乡县| 邢台县| 乌拉特中旗| 堆龙德庆县| 高雄县| 乐至县| 玛曲县| 郁南县| 怀宁县| 留坝县| 伊宁县| 沐川县| 邵东县| 长葛市| 肇州县| 咸阳市|