设计模式1

设计模式

自定义数据库连接池

概述

​ java.sql.DataSource 接口: 数据源(数据库连接池) java官方提供的数据库连接池规范(接口)

	//1. 实现DataSource接口.(这是JDBC定义的规范)
public class DataS implements DataSource {
    //2. 用集合来存储连接(Connection) .List<> 集合
    private List<Connection> DataS;
	
    public DataS() {
        DataS = new ArrayList<>();
        for (int i = 0; i < 10; i++) {    						                       		   		 DataS.add(JDBCUtils.getConnection());
        }
    }

    public int getSize() {
        return DataS.size();
    }


    @Override
    public Connection getConnection() throws SQLException {
        Connection con = null;
        if (DataS.size() > 0) {
            con = DataS.get(0);
            DataS.remove(con);
        }
        return con;
    }
		/*归还连接的方式:
				继承
				装饰者模式
				适配器模式
				动态代理模式
		*/
装饰者模式

​ 必须实现相同的接口

​ 装饰类必须传入被装饰类的对象

​ 需要增强方法则对其拓展

​ 不需要拓展则字节调用原方法`

/*
	作用: 在不改变原有类本质和基础功能的情况下增强原有类的功能
	原有类A 
    LoginA 装饰者类
    装饰本质: 
    	装饰后本质不改变
    	如果被装饰者有功能实现,那么自己可以直接调用装饰者的功能,自己只需做其他加上的功能    	
*/
			//KTV 类
			public interface KTV {
   		 		void sing();
			}
			// 实现类1 只有基础的唱歌功能
		public class heimaKTV implements KTV {
   			 @Override
   			 public void sing() {
        			System.out.println("唱歌功能");
   				 }
			}
			// 实现类2 加上了 灯光效果
			public class ligthKTV implements KTV {
                private KTV ktv;

                public ligthKTV(KTV ktv) {
                    this.ktv = ktv;
                }

                @Override
                public void sing() {
                    ktv.sing();
                    System.out.println("加上灯光效果");
                }
            }
			//实现类3 有了休息室
			public class ServiceKTV implements KTV {
                private KTV ktv;

                public ServiceKTV(KTV ktv) {
                    this.ktv = ktv;
                }

                @Override
                public void sing() {
                    ktv.sing();
                    System.out.println("加上休息室");
                }
            }
			//测试类:
			public class Text {
                public static void main(String[] args) {
                    KTV ktv = new heimaKTV();
                    KTV ktv1 = new ligthKTV(ktv);
                    KTV ktv2 = new ServiceKTV(ktv1);
                    ktv2.sing();
                }
            }
/**
			打印结果:
				唱歌功能
                加上灯光效果
                加上休息室
*/


适配器模式
/*
	对象: 
		目标接口(想要的类型)
		已存在的接口
		适配(实现目标接口,继承已有实现)
		被继承的类,已经重写了需要改变目标接口的方法,适配器可以直接调用父类的该方法.
	目标:
		已有sports接口.(这是目标类型),目前系统已有SportsEx
*/
//代码实现
			// 定义一个已知接口
        public interface Sports {
            void sport();
        }
			//定义一个类,作为父类,用来被适配器继承
		public class Exercise {
                public void exercise() {
                    System.out.println("正在运动");
                }
            }
			// 定义一个适配器.继承Exercise类,实现Sports接口
		public class Aupadter extends Exercise implements Sports {
            @Override
            public void sport() {
                exercise();
            }
        }
			//定义一个类.使用被重写后的已知接口的方法,
                public class Person {
                    private Sports sport;

                    public Person(Sports sport) {
                        this.sport = sport;
                    }

                    public void setSport() {
                        sport.sport();
                    }
                }
		//测试
               public class Text {
                public static void main(String[] args) {
                     Person p = new Person(new Aupadter());
                        p.setSport();
                    }
                }
			//打印结果:正在运动
 						
			

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值