抽象工厂――设计模式
一、了解 抽象 工厂 设计 模式 书上说:提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类。 二、看类图 解说员:图上分两部分来看,一部分是左边的IFactory家族,另一部分是右边的IProduct 家族。 1、先看IProduct家族。 第一层:客户需
书上说:提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类。
二、看类图
解说员:图上分两部分来看,一部分是左边的IFactory家族,另一部分是右边的IProduct 家族。
1、先看IProduct家族。
第一层:客户需求。可以看出我们需要哪些产品,由客户端决定,我们需要提前设计好第二层的产品。
第二层:ProductA和ProductB,这一系列的产品,具体要根据实际情况来确定。
第二层要说明的是:这个具体的产品的属性是不变的,而我们要对这个产品进行的各种操作是变化的,为了符合开放——封闭,和封装原则,在修改方法的时候不必影响到属性,我们把这个产品类分成了两部分,一部分是具体的名词类,不包含任何方法,只有该类的属性;另一部分是抽象接口:定义对该类的操作方法。这样我们就可以单独的对一个类的属性或者是方法进行分别操作,而互不影响,做到面向对象的封装。他们之间是依赖关系,接口依赖具体类。这个内部关系,在上图中没有变现出来。
也就是说,第三层实现的是第二层的接口方法,访问和操作的是第二层的具体类。
第三层:A1,A2,则是具体的实现类了。他们是ProductA 的具体实现过程。可能实现有多种,SO,具体的实现类也要多个,当然也需要一个统一的接口来统一管理。这里的接口就设在了第二层,有力第二层的接口,我们就可以在三层进行扩展,这也是一个封装。
体现的原则
开放——封闭原则:对扩展开放,对修改封闭。
在这个三层图上,有两个接口,也就是有两个地方可能发生变化,一个是数据库的选择,一个是访问数据库表的选择。
依赖倒转原则:抽象工厂的设计是由上自下逐步抽象的,且是针对接口编程,在最后一层才开始考虑具体的实现,提高了代码的复用,分别体现了:高层模块不依赖低层模块;抽象不依赖细节。
单一原则:第三层的每个类都是对单一功能的实现,对一个数据库表进行访问。
举例说明:用户需要访问数据库,那第二层就是数据库表,这些是哪个数据库都具备的;从第一层到二层扩展为了将来对更多或者其他数据库表的访问;现在我们要访问用户表,或许以后,我们还需要访问公司部门表,或者公司财务表;第三层应该考虑数据库的具体访问,操作实现,可扩展的子类有SQL server,Access 或者oracle。这些都是不同的实现过称,但同属于实现这一级别。可能现在用的是access,将来用SQL server,或者是Oracle,所以我们在要第二层为什么准备了接口,以备第三层的多种实现。
2、看IFactory家族。
此处工厂不是具体的制造产品的工厂,只是一个中介所。为什么这么说?
第一层:定义了一个创建一系列相关或相互依赖对象的接口。
例如我们需要访问的多个数据库表都在其中定义。这也是区别于工厂模式的一点。工厂模式针对的是一类,而抽象工厂针对的是一系列产品。
第二层:具体实现访问方法,他们根据客户端实例化的对象,帮助用户找到Iproduct 家族中第三层的地址,达到实现的目的。
练手:对SQL server和ACCESS两种数据库中的用户表和部门表进行访问。
[csharp]
//定义用户表类——定义了用户表的属性
class User
{
private int id;
public int ID
{
get { return id; }
set { id = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
//定义数据库用户表接口——定义了对用户表的进行的操作
interface IUser
{
void Insert(User user);
User GetUser(int id);
}
//定义SQL数据库表
class SqlserverUser:IUser
{
public void Insert(User user)
{
Console.WriteLine("在SQL 中增加一条用户记录");
}
public User GetUser(int id)
{
Console.WriteLine("在SQL 中根据ID得到一条用户记录");
return null;
}
}
//定义Access数据库表
class AccessUser : IUser
{
public void Insert(User user)
{
Console.WriteLine("在Access 中增加一条用户记录");
}
public User GetUser(int id)
{
Console.WriteLine("在Access 中根据ID得到一条用户记录");
return null;
}
}
//定义数据库部门表——属性
class Department
{
private int id;
public int ID
{
get { return id; }
set { id = value; }
}
private string dname;
public string DName
{
get { return dname; }
set { dname = value; }
}
}
//定义操作部门的接口——操作
interface IDepartmnet
{
void Insert(Department department);
Department GetDepartment(int id);
}
//定义用于访问部门的SQL 实现
class SQLdepartment:IDepartmnet
{
public void Insert(Department department)
{
Console.WriteLine("在SQL 中插入一条记录!");
}
public Department GetDepartment(int id)
{
Console.WriteLine("根据ID 号取出部门!");
return null;
}
}
//定义用于访问部门的Access 实现
class Accessdepartment : IDepartmnet
{
public void Insert(Department department)
{
Console.WriteLine("在SQL 中插入一条记录!");
}
public Department GetDepartment(int id)
{
Console.WriteLine("根据ID 号取出部门!");
return null;
}
}
//定义访问数据库表的工厂接口
interface IFactory
{
IUser CreateUser();
IDepartmnet CreatDepartment();
}
//实例化SQL 工厂接口
class SqlFactory : IFactory
{
public IUser CreateUser()
{
return new SqlserverUser();
}
public IDepartmnet CreatDepartment()
{
return new SQLdepartment();
}
}
//实例化Access工厂接口
class AccessFactory : IFactory
{
public IUser CreateUser()
{
return new AccessUser();
}
public IDepartmnet CreatDepartment()
{
return new Accessdepartment();
}
}
static void Main(string[] args)
{
User user = new User();
Department department = new Department();
IFactory factory = new SqlFactory();
IUser iu = factory.CreateUser();
iu.Insert(user);
iu.GetUser(2);//任意的int类型的都可以
IFactory factory1 = new AccessFactory();
IUser au = factory1.CreateUser();
au.Insert(user);
au.GetUser(2);//任意的int类型的都可以
IFactory factoryd = new SqlFactory();
IDepartmnet id=factoryd .CreatDepartment ();
id.Insert (department );
id.GetDepartment (1);
IFactory factorya = new AccessFactory();
IDepartmnet ad=factoryd .CreatDepartment ();
ad.Insert (department );
ad.GetDepartment (1);
www.2cto.com
//IUser au = new AccessUser();
//au.Insert(user);
//au.GetUser(2);//任意的int类型的都可以
Console.Read();
}

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











7월 12일 뉴스에 따르면, 새로운 Honor Vision Soothing Oasis 눈 보호 화면을 탑재한 Honor Magic V3 시리즈가 오늘 공식 출시되었습니다. 화면 자체는 높은 사양과 품질을 갖추고 있으면서도 AI 능동형 눈 보호 장치 도입을 개척했습니다. 기술. 근시를 완화하는 전통적인 방법은 근시 안경의 도수가 고르게 분포되어 있어 중심 시력 영역은 망막에 맺히지만 주변 영역은 망막 뒤에 맺히는 것으로 알려져 있습니다. 망막은 상이 뒤쳐져 있음을 감지하여 눈의 축방향 성장을 촉진시켜 정도를 심화시킵니다. 현재 근시 발생을 완화시키는 주요 방법 중 하나가 '디포커스 렌즈'다. 중심 영역은 정상적인 도수를 갖고, 주변 영역은 광학 설계 파티션을 통해 조절해 주변 영역의 상이 안으로 들어가게 한다. 망막 앞.

7월 29일 뉴스에 따르면 Honor X60i 휴대폰은 오늘부터 1,399위안부터 공식 판매되고 있다. 디자인 측면에서 Honor X60i 휴대폰은 중앙에 구멍이 있고 4면 모두 경계가 거의 없는 매우 좁은 테두리가 있는 직선형 스크린 디자인을 채택하여 시야를 크게 넓혔습니다. Honor X60i 매개변수 디스플레이: 6.7인치 고화질 디스플레이 배터리: 5000mAh 대용량 배터리 프로세서: Dimensity 6080 프로세서(TSMC 6nm, 2x2.4G A76+6×2G A55) 시스템: MagicOS8.0 시스템 기타 기능: 5G 신호 향상 , 스마트 캡슐, 언더스크린 지문, 듀얼 마이크, 소음 감소, 지식 Q&A, 사진 촬영 기능: 후면 듀얼 카메라 시스템: 5천만 화소 메인 카메라, 200만 화소 보조 렌즈, 전면 셀카 렌즈: 800만 화소, 가격: 8GB

5월 13일 뉴스에 따르면 vivoX100s는 오늘 밤 공식적으로 출시되었으며 뛰어난 이미지 외에도 신호 성능도 매우 뛰어납니다. vivo의 공식 소개에 따르면 vivoX100s는 최대 21개의 안테나가 장착된 혁신적인 범용 신호 증폭 시스템을 사용합니다. 이 디자인은 5G, 4G, Wi-Fi, GPS, NFC 등 다양한 신호 요구 사항의 균형을 맞추기 위해 다이렉트 화면을 기반으로 다시 최적화되었습니다. 이로써 vivoX100s는 생체 역사상 가장 강력한 신호 수신 기능을 갖춘 휴대폰이 되었습니다. 새 휴대폰은 또한 안테나가 본체 주위에 분산된 독특한 360° 서라운드 디자인을 사용합니다. 이 디자인은 신호 강도를 향상시킬 뿐만 아니라 다양한 일상 자세를 최적화하여 부적절한 쥐기 방법으로 인해 발생하는 문제를 방지합니다.

7월 19일 뉴스에 따르면, 첫 번째 플래그십 폴더블 폴더블폰인 샤오미 MIX Fold 4가 오늘 공식 출시됐으며 최초로 '3차원 특수형 배터리'를 탑재했다. 보도에 따르면 샤오미 MIX Fold4는 배터리 기술에서 획기적인 발전을 이루었으며 접이식 스크린을 위해 특별히 혁신적인 '3차원 특수형 배터리'를 설계했습니다. 기존 병풍장치는 공간 활용 효율이 낮은 기존의 각형 전지를 주로 사용하고 있다. 이 문제를 해결하기 위해 샤오미는 일반적인 와인딩 배터리 셀을 사용하지 않고 새로운 적층 공정을 개발하여 새로운 형태의 배터리를 만들어 공간 활용도를 크게 향상시켰습니다. 배터리 기술 혁신 양극 시트와 음극 시트를 정확하게 교대로 쌓고 리튬 이온의 안전한 매립을 보장하기 위해 Xiaomi는 용접 및 절단 정확도를 향상시키는 새로운 초음파 용접기와 라미네이션 기계를 개발했습니다.

Xiaomi의 Redmi 브랜드는 포트폴리오에 또 다른 저가형 전화기인 Redmi 14C를 추가할 준비를 하고 있습니다. 해당 기기는 8월 31일 베트남에서 출시되는 것으로 확인됐다. 그러나 출시를 앞두고 베트남 소매업체를 통해 휴대폰 사양이 공개됐다. Redmi14CR Redmi는 종종 새로운 시리즈에서 새로운 디자인을 선보이며 Redmi14C도 예외는 아닙니다. 전화기 뒷면에는 대형 원형 카메라 모듈이 있는데, 이는 이전 제품의 디자인과 완전히 다릅니다. 블루 컬러 버전은 그라데이션 디자인까지 적용해 더욱 고급스러워 보인다. 그러나 Redmi14C는 실제로 경제적인 휴대폰입니다. 카메라 모듈은 4개의 링으로 구성됩니다. 하나는 기본 50 메가픽셀 센서를 수용하고 다른 하나는 깊이 정보를 위한 카메라를 수용할 수 있습니다.

Java 프레임워크에서 디자인 패턴과 아키텍처 패턴의 차이점은 디자인 패턴이 클래스와 객체(예: 팩토리 패턴) 간의 상호 작용에 중점을 두고 소프트웨어 디자인의 일반적인 문제에 대한 추상적인 솔루션을 정의한다는 것입니다. 아키텍처 패턴은 계층화된 아키텍처와 같은 시스템 구성 요소의 구성 및 상호 작용에 중점을 두고 시스템 구조와 모듈 간의 관계를 정의합니다.

7월 12일 뉴스에 따르면 Honor Magic V3가 오늘 공식 출시되어 폴더블 스크린 휴대폰의 두께가 9.2mm로 늘어났습니다. 특히 Honor MagicV3는 얇고 가벼움의 궁극을 추구하는 동시에 최첨단 기술을 사용하여 업계 최고의 방수 성능도 달성했다는 점은 언급할 가치가 있습니다. 10미크론 정밀 충진 기술 덕분에 이 휴대폰은 IPX8 방수 표준을 충족할 뿐만 아니라 습한 환경에서도 터치 감도를 유지하여 사용자에게 걱정 없는 경험을 제공합니다. 기자회견에서 Honor는 대담한 실험을 진행했고 MagicV3를 드럼 세탁기에 직접 넣어 15분간의 빠른 세탁 테스트를 실시했습니다. 결과는 놀라웠습니다. 휴대폰이 안전할 뿐만 아니라 탁월한 방수 기능도 입증했습니다. 영광

6월 27일 뉴스에 따르면 OnePlus Ace3Pro는 3세대 Snapdragon 8 플래그십 코어를 탑재한 것 외에도 열 방출에도 많은 노력을 기울였습니다. 보도에 따르면 OnePlus Ace3 Pro는 처음으로 2세대 Tiangong 냉각 시스템을 도입했습니다. 이 시스템에는 9126mm² 10,000등급 VC 방열판이 탑재되어 이전 세대에 비해 열 방출 효율이 36배나 향상되었습니다. %. 이 획기적인 기술을 사용하면 휴대폰이 고부하에서 작동할 때 열을 빠르게 방출하여 휴대폰의 안정적인 성능을 보장할 수 있습니다. 더욱 놀라운 점은 OnePlus Ace3Pro가 최초로 2K 초임계 열흑연을 사용했다는 점입니다. 열전도율이 2041W/(m·K)로 업계 1위를 차지합니다. 방열 용량이 70% 증가하여 휴대폰의 방열 성능이 향상되고 안정적인 작동 온도가 유지됩니다. 뿔뿔이 흩어진
