工厂模式与策略模式
Code
??1package?designmode;
??2/**?*//**
??3?*?策略模式結合簡單工廠模式
??4?*
??5?*
??6?*/
??7//?數據操作接口
??8interface?DataOperate?{
??9????
?10????People?getPeople(String?oid);
?11????boolean?insertPeople(People?people);
?12????
?13????DataBaseOperateStrategy?getDBOS();
?14}
?15//?數據庫操作接口
?16interface?DataBaseOperate{
?17????void?driverRegist();
?18????void?connection();
?19????void?close();
?20}
?21//?oracle數據庫操作類
?22class?OracelDataBaseOperate?implements?DataBaseOperate{
?23????OracelDataBaseOperate(){
?24????????System.out.println("new?oracle?DATABASE?operation?class");
?25????}
?26????public?void?driverRegist(){
?27????????System.out.println("new?oracle?DATABASE?regist");
?28????}
?29????public?void?connection(){
?30????????System.out.println("new?oracle?DATABASE?connection");
?31????}
?32????public?void?close(){
?33????????System.out.println("new?oracle?DATABASE?close\n\t");
?34????}
?35}
?36//?Mysql數據庫操作類
?37class?MysqlDataBaseOperate?implements?DataBaseOperate{
?38????MysqlDataBaseOperate(){
?39????????System.out.println("new?mysql?DATABASE?operation?class");
?40????}
?41????public?void?driverRegist(){
?42????????System.out.println("new?mysql?DATABASE?regist");
?43????}
?44????public?void?connection(){
?45????????System.out.println("new?mysql?DATABASE?connection");
?46????}
?47????public?void?close(){
?48????????System.out.println("new?mysql?DATABASE?close\n\t");
?49????}
?50}
?51//?Sqlserver數據庫操作類
?52class?SqlserverDataBaseOperate?implements?DataBaseOperate{
?53????SqlserverDataBaseOperate(){
?54????????System.out.println("new?sqlserver?DATABASE?operation?class");
?55????}
?56????public?void?driverRegist(){
?57????????System.out.println("new?sqlserver?DATABASE?regist");
?58????}
?59????public?void?connection(){
?60????????System.out.println("new?sqlserver?DATABASE?connection");
?61????}
?62????public?void?close(){
?63????????System.out.println("new?sqlserver?DATABASE?close\n\t");
?64????}
?65}
?66//?oracle數據操作類
?67class?OracelDataOperate?implements?DataOperate{
?68????public?DataBaseOperateStrategy?dbos;
?69????OracelDataOperate(){
?70????????System.out.println("new?oracle?DATA?operation?class");
?71????????this.dbos?=?new?DataBaseOperateStrategy(1);
?72????}
?73????public?People?getPeople(String?oid){
?74????????return?new?People();
?75????}
?76????public?boolean?insertPeople(People?people){
?77????????System.out.println("insert?new?Person?to?ORACLE?database?");
?78????????return?true;
?79????}
?80????public?DataBaseOperateStrategy?getDBOS(){
?81????????return?this.dbos;
?82????}
?83}
?84//?Mysql數據操作類
?85class?MysqlDataOperate?implements?DataOperate{
?86????public?DataBaseOperateStrategy?dbos;
?87????MysqlDataOperate(){
?88????????System.out.println("new?mysql?DATA?operation?class?");
?89????????this.dbos?=?new?DataBaseOperateStrategy(2);
?90????}
?91????public?People?getPeople(String?oid){
?92????????return?new?People();
?93????}
?94????public?boolean?insertPeople(People?people){
?95????????System.out.println("insert?new?Person?to?MYSQL?database?");
?96????????return?true;
?97????}
?98????public?DataBaseOperateStrategy?getDBOS(){
?99????????return?this.dbos;
100????}
101}
102//?Sqlserver數據操作類
103class?SqlserverDataOperate?implements?DataOperate{
104????public?DataBaseOperateStrategy?dbos;
105????SqlserverDataOperate(){
106????????System.out.println("new?sqlserver?DATA?operation?class?");
107????????this.dbos?=?new?DataBaseOperateStrategy(3);
108????}
109????public?People?getPeople(String?oid){
110????????return?new?People();
111????}
112????public?boolean?insertPeople(People?people){
113????????System.out.println("insert?new?Person?to?SQLSERVER?database?");
114????????return?true;
115????}
116????public?DataBaseOperateStrategy?getDBOS(){
117????????return?this.dbos;
118????}
119}
120//?策略類
121class?DataBaseOperateStrategy{
122??
123??DataBaseOperate?oper;
124??DataBaseOperateStrategy(int?no){
125??????switch?(no)
126??????{
127??????????case?1:
128???????????OracelDataBaseOperate?os=new?OracelDataBaseOperate();
129???????????oper=os;
130???????????break;
131???????????
132??????????case?2:
133???????????MysqlDataBaseOperate?os1=new?MysqlDataBaseOperate();
134???????????oper=os1;
135???????????break;
136???????????
137??????????case?3:
138???????????SqlserverDataBaseOperate?os2=new?SqlserverDataBaseOperate();
139???????????oper=os2;
140???????????break;
141??????}
142??}
143??public?void?eDriverRegist()
144??{
145????oper.driverRegist();?
146??}
147??public?void?eConnection()
148??{
149????oper.connection();?
150??}
151??public?void?eClose()
152??{
153????oper.close();?
154??}
155}
156//?工廠類
157class?DataOperateFactory?{
158????public?static?final?int?ORACLE?=?0;
159????public?static?final?int?MYSQL?=?1;
160????public?static?final?int?SQLSERVER?=?2;
161????
162????public??DataOperate?getDataOjbect(int?no)?{
163????????DataOperate?db?=?null;
164????????if?(db?==?null)?{
165????????????if?(no?==?ORACLE)
166????????????????db?=?new?OracelDataOperate();
167????????????if?(no?==?MYSQL)
168????????????????db?=??new?MysqlDataOperate();
169????????????if?(no?==?SQLSERVER)
170????????????????db?=??new?SqlserverDataOperate();
171????????}
172????????return?db;
173????}
174}
175//?數據類
176class?People?{
177????People(){
178????????System.out.println("new?Person");
179????}
180}
181//?測試類
182class?TestCase{
183????private??DataOperate?db1;
184????private??DataOperate?db2;
185????private??DataOperate?db3;
186????
187????public?void?test(){
188????????DataOperateFactory?dof?=??new?DataOperateFactory();
189????????
190????????db1?=?dof.getDataOjbect(0);
191????????DataBaseOperateStrategy?oracle?=?db1.getDBOS();
192????????oracle.eDriverRegist();
193????????oracle.eConnection();?????????????
194????????People?p?=?db1.getPeople("123");
195????????db1.insertPeople(p);
196????????oracle.eClose();??
197????????
198????????db2?=?dof.getDataOjbect(1);
199????????DataBaseOperateStrategy?mysql?=?db2.getDBOS();
200????????mysql.eDriverRegist();
201????????mysql.eConnection();?????????????
202????????People?p1?=?db2.getPeople("123");
203????????db2.insertPeople(p1);
204????????mysql.eClose();
205????????
206????????db3?=?dof.getDataOjbect(2);
207????????DataBaseOperateStrategy?sqlserver?=?db3.getDBOS();
208????????sqlserver.eDriverRegist();
209????????sqlserver.eConnection();?????????????
210????????People?p2?=?db3.getPeople("123");
211????????db3.insertPeople(p2);
212????????mysql.eClose();
213????}
214}
215
216public?class?FactorySimpleStrategyModel?{
217????
218????public?static?void?main(String[]?args)?{
219????????TestCase?case1?=?new?TestCase();
220????????case1.test();
221????}
222
223}
224
??1package?designmode;
??2/**?*//**
??3?*?策略模式結合簡單工廠模式
??4?*
??5?*
??6?*/
??7//?數據操作接口
??8interface?DataOperate?{
??9????
?10????People?getPeople(String?oid);
?11????boolean?insertPeople(People?people);
?12????
?13????DataBaseOperateStrategy?getDBOS();
?14}
?15//?數據庫操作接口
?16interface?DataBaseOperate{
?17????void?driverRegist();
?18????void?connection();
?19????void?close();
?20}
?21//?oracle數據庫操作類
?22class?OracelDataBaseOperate?implements?DataBaseOperate{
?23????OracelDataBaseOperate(){
?24????????System.out.println("new?oracle?DATABASE?operation?class");
?25????}
?26????public?void?driverRegist(){
?27????????System.out.println("new?oracle?DATABASE?regist");
?28????}
?29????public?void?connection(){
?30????????System.out.println("new?oracle?DATABASE?connection");
?31????}
?32????public?void?close(){
?33????????System.out.println("new?oracle?DATABASE?close\n\t");
?34????}
?35}
?36//?Mysql數據庫操作類
?37class?MysqlDataBaseOperate?implements?DataBaseOperate{
?38????MysqlDataBaseOperate(){
?39????????System.out.println("new?mysql?DATABASE?operation?class");
?40????}
?41????public?void?driverRegist(){
?42????????System.out.println("new?mysql?DATABASE?regist");
?43????}
?44????public?void?connection(){
?45????????System.out.println("new?mysql?DATABASE?connection");
?46????}
?47????public?void?close(){
?48????????System.out.println("new?mysql?DATABASE?close\n\t");
?49????}
?50}
?51//?Sqlserver數據庫操作類
?52class?SqlserverDataBaseOperate?implements?DataBaseOperate{
?53????SqlserverDataBaseOperate(){
?54????????System.out.println("new?sqlserver?DATABASE?operation?class");
?55????}
?56????public?void?driverRegist(){
?57????????System.out.println("new?sqlserver?DATABASE?regist");
?58????}
?59????public?void?connection(){
?60????????System.out.println("new?sqlserver?DATABASE?connection");
?61????}
?62????public?void?close(){
?63????????System.out.println("new?sqlserver?DATABASE?close\n\t");
?64????}
?65}
?66//?oracle數據操作類
?67class?OracelDataOperate?implements?DataOperate{
?68????public?DataBaseOperateStrategy?dbos;
?69????OracelDataOperate(){
?70????????System.out.println("new?oracle?DATA?operation?class");
?71????????this.dbos?=?new?DataBaseOperateStrategy(1);
?72????}
?73????public?People?getPeople(String?oid){
?74????????return?new?People();
?75????}
?76????public?boolean?insertPeople(People?people){
?77????????System.out.println("insert?new?Person?to?ORACLE?database?");
?78????????return?true;
?79????}
?80????public?DataBaseOperateStrategy?getDBOS(){
?81????????return?this.dbos;
?82????}
?83}
?84//?Mysql數據操作類
?85class?MysqlDataOperate?implements?DataOperate{
?86????public?DataBaseOperateStrategy?dbos;
?87????MysqlDataOperate(){
?88????????System.out.println("new?mysql?DATA?operation?class?");
?89????????this.dbos?=?new?DataBaseOperateStrategy(2);
?90????}
?91????public?People?getPeople(String?oid){
?92????????return?new?People();
?93????}
?94????public?boolean?insertPeople(People?people){
?95????????System.out.println("insert?new?Person?to?MYSQL?database?");
?96????????return?true;
?97????}
?98????public?DataBaseOperateStrategy?getDBOS(){
?99????????return?this.dbos;
100????}
101}
102//?Sqlserver數據操作類
103class?SqlserverDataOperate?implements?DataOperate{
104????public?DataBaseOperateStrategy?dbos;
105????SqlserverDataOperate(){
106????????System.out.println("new?sqlserver?DATA?operation?class?");
107????????this.dbos?=?new?DataBaseOperateStrategy(3);
108????}
109????public?People?getPeople(String?oid){
110????????return?new?People();
111????}
112????public?boolean?insertPeople(People?people){
113????????System.out.println("insert?new?Person?to?SQLSERVER?database?");
114????????return?true;
115????}
116????public?DataBaseOperateStrategy?getDBOS(){
117????????return?this.dbos;
118????}
119}
120//?策略類
121class?DataBaseOperateStrategy{
122??
123??DataBaseOperate?oper;
124??DataBaseOperateStrategy(int?no){
125??????switch?(no)
126??????{
127??????????case?1:
128???????????OracelDataBaseOperate?os=new?OracelDataBaseOperate();
129???????????oper=os;
130???????????break;
131???????????
132??????????case?2:
133???????????MysqlDataBaseOperate?os1=new?MysqlDataBaseOperate();
134???????????oper=os1;
135???????????break;
136???????????
137??????????case?3:
138???????????SqlserverDataBaseOperate?os2=new?SqlserverDataBaseOperate();
139???????????oper=os2;
140???????????break;
141??????}
142??}
143??public?void?eDriverRegist()
144??{
145????oper.driverRegist();?
146??}
147??public?void?eConnection()
148??{
149????oper.connection();?
150??}
151??public?void?eClose()
152??{
153????oper.close();?
154??}
155}
156//?工廠類
157class?DataOperateFactory?{
158????public?static?final?int?ORACLE?=?0;
159????public?static?final?int?MYSQL?=?1;
160????public?static?final?int?SQLSERVER?=?2;
161????
162????public??DataOperate?getDataOjbect(int?no)?{
163????????DataOperate?db?=?null;
164????????if?(db?==?null)?{
165????????????if?(no?==?ORACLE)
166????????????????db?=?new?OracelDataOperate();
167????????????if?(no?==?MYSQL)
168????????????????db?=??new?MysqlDataOperate();
169????????????if?(no?==?SQLSERVER)
170????????????????db?=??new?SqlserverDataOperate();
171????????}
172????????return?db;
173????}
174}
175//?數據類
176class?People?{
177????People(){
178????????System.out.println("new?Person");
179????}
180}
181//?測試類
182class?TestCase{
183????private??DataOperate?db1;
184????private??DataOperate?db2;
185????private??DataOperate?db3;
186????
187????public?void?test(){
188????????DataOperateFactory?dof?=??new?DataOperateFactory();
189????????
190????????db1?=?dof.getDataOjbect(0);
191????????DataBaseOperateStrategy?oracle?=?db1.getDBOS();
192????????oracle.eDriverRegist();
193????????oracle.eConnection();?????????????
194????????People?p?=?db1.getPeople("123");
195????????db1.insertPeople(p);
196????????oracle.eClose();??
197????????
198????????db2?=?dof.getDataOjbect(1);
199????????DataBaseOperateStrategy?mysql?=?db2.getDBOS();
200????????mysql.eDriverRegist();
201????????mysql.eConnection();?????????????
202????????People?p1?=?db2.getPeople("123");
203????????db2.insertPeople(p1);
204????????mysql.eClose();
205????????
206????????db3?=?dof.getDataOjbect(2);
207????????DataBaseOperateStrategy?sqlserver?=?db3.getDBOS();
208????????sqlserver.eDriverRegist();
209????????sqlserver.eConnection();?????????????
210????????People?p2?=?db3.getPeople("123");
211????????db3.insertPeople(p2);
212????????mysql.eClose();
213????}
214}
215
216public?class?FactorySimpleStrategyModel?{
217????
218????public?static?void?main(String[]?args)?{
219????????TestCase?case1?=?new?TestCase();
220????????case1.test();
221????}
222
223}
224
轉載于:https://www.cnblogs.com/zhangcunhua/archive/2009/04/16/1437312.html
總結